当前位置: 首页 > 知识库问答 >
问题:

MVC中带Spring的正确结构

弘烨烁
2023-03-14

我对正确的mvc模式有点困惑。

这是我的配置文件:在这个类中,我有所有的Beans。

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = " name.web.controller")
@PropertySource("classpath:NewLibrary.properties")
@EnableTransactionManagement

    @Bean
    public UserRepo getUserService() {
        return new UserImpl(getDataSource());
    }
    
    
    @Bean
    public BookRepo getBookService() {
        return new BookImpl(getDataSource());
    }

这是我的接口UserRepo和接口UserService。它们是一样的

public interface UserService {
public String getUser();
void add(UserModel u);
UserModel getById(int id);
UserModel getByName(String name);
UserModel getByCognome(String surname);
Optional<UserModel> findOne(int id);
public void insert(User u);
public String giveName();
List<UserModel>ByNome(String nome);
List<UserModel> ByPassAndUsername(String password, String username);

}

我的类实现了这个接口

@Repository
public class UserImpl extends AbstractDao<UserModel, Integer> implements UserRepo {
@PersistenceContext
private EntityManager em;
 @Autowired
public UserRepo userRepo;

private JdbcTemplate conn;
@Override
@Transactional
public void add(UserModel u) {
    em.persist(u);
}
public UserImpl(DataSource ds) {
    conn= new JdbcTemplate(ds);
}
@Override
public UserModel getById(int id) {
    return em.find(UserModel.class, id);
}
@Override
public UserModel getByName(String nome) {
    CriteriaBuilder queryBuilder= em.getCriteriaBuilder();
    CriteriaQuery<UserModel> query= 
queryBuilder.createQuery(UserModel.class);
    Root<UserModel> rec= query.from(UseriModel.class);
     
query.select(rec).where(queryBuilder.equal(rec.get("nome"), nome));
     
     UserModel ut=em.createQuery(query).getSingleResult();
     em.clear();
    
     return ut;
    
    //return em.find(UtentiModel.class, nome);
    
};

最后,我在控制器I@Autowired UsersRepo/中安装了控制器,这是一个接口/。我的代码可以运行,我可以做所有的CRUD操作。

但是,有人告诉我,这不是正确的方式。我不能直接自动连线@在控制器类内部自动连接UserRepo。所以我在网上搜索信息,然后创建一个服务类。它提供的服务是这样的:具有与我在UserRepo interface中编写的方法相同的接口。在我创建了实现该接口的类UserSeviceImpl之后。

在userServiceImpl中,我转到@Autowire UserRepo界面,然后转到控制器中的@Autowire userService。

但是现在我的代码不起作用了,我在所有控件的所有页面中都得到了404状态:`请求的资源[/bookProject/]不可用

说明源服务器找不到目标资源的当前表示形式,或者不愿意透露存在该表示形式`

控制台中没有错误,只有信息:

INFO: Command line argument: -Dfile.encoding=UTF-8
set 30, 2021 5:41:10 PM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: The Apache Tomcat Native library which allows using OpenSSL was not found on the java.library.path: [/usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib]
set 30, 2021 5:41:10 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-nio-8080"]
set 30, 2021 5:41:10 PM org.apache.catalina.startup.Catalina load
INFO: Server initialization in [624] milliseconds
set 30, 2021 5:41:10 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service [Catalina]
set 30, 2021 5:41:10 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet engine: [Apache Tomcat/9.0.50]
set 30, 2021 5:41:12 PM org.apache.jasper.servlet.TldScanner scanJars
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
set 30, 2021 5:41:12 PM org.apache.catalina.core.ApplicationContext log
INFO: No Spring WebApplicationInitializer types detected on classpath
set 30, 2021 5:41:12 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory [/home/viktoriya/Scrivania/apache-tomcat-9.0.50/webapps/ROOT]
 set 30, 2021 5:41:12 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deployment of web application directory [/home/viktoriya/Scrivania/apache-tomcat-9.0.50/webapps/ROOT] has finished in [13] ms
set 30, 2021 5:41:12 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-nio-8080"]
set 30, 2021 5:41:12 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in [2050] milliseconds

因此,我无法理解是否自动连接某些bean是错误的,或者我当前的模式是错误的,或者我是否需要更改配置类中的某些内容,或者我是否没有很好地应用服务类。因为在我的代码运行良好之前。

这是我的控制器:@Controller公共类UserController{@自动配电的私人用户服务我们;列表用户;@GetMap("/new")公共模型和视图新(模型){

UserModel users= new UserModel();
model.addAttribute("utenteForm", user);
return new ModelAndView("client", "utenteForm", new 
UtentiModel());
}
@PostMapping("/add")
public ModelAndView sumbit(@ModelAttribute("utenteForm") UserModel users)
{ us.ad(users);

这是UserServiceImpl:

@Service
public class UserServiceImpl implements UserService{
private final static Logger log= 
Logger.getLogger(UserServiceImpl.class.getName());
@Autowired
private UserRepo userRepo;
@PersistenceContext
private EntityManager em;
@Override
public void add(UserModel u) {
    userRepo.add(u);
}
@Override
public UserModel getByName(String name) {
    
    return userRepo.getByName(name);
}

共有1个答案

谷梁镜
2023-03-14

我会说,根据控制器定义检查您调用的路径。我认为如果你更新代码来查看控制器会有所帮助。

例:

@RestController
@RequestMapping("/test")
public class TestRestController{

  @Autowired
  private TestService testService;
 .....
}

 @Service
public class TestServiceImpl implements TestService {

  @Autowired    
  private TestRepository testRepository;

}
@Repository
@Transactional
 public class TestRepositoryImpl implements TestRepository{
 
 }
 类似资料:
  • 我创建了一个AbstractView,以便向浏览器输出一些XML,如下所示: 如您所见,我的子类将定义方法,以填充实际交付给浏览器的XML文档,因此下面是一个简化的实现: 请注意元素中的文本字符串“I'm unicodeáèóú”。当我向服务器请求这个时,我得到一个UTF-8编码的HTTP响应(OK),XML定义说它是UTF-8,但是节点的文本将被编码为ISO-8859-1(这是我的猜测,因为当我

  • 我需要将一些请求参数从浏览器发送到Spring MVC控制器,然后像方法参数一样处理它们。问题是tomcat我想没有为通过的URI数据正确编码。而不是我有: 我曾经读到过这种类型的问题,这是因为tomcat没有预装URI编码。 如果你介意我有身体编码在tomcat配置web.xml,所以是的我有: 所以我很好奇我还需要设置容器配置吗?谢谢

  • 这是spring MVC@pathvariable被截断问题的继续 spring论坛声明,它已经修复(3.2版本)作为ContentNegotiationManager的一部分。请参阅以下链接。 https://jira.springsource.org/browse/spr-6164 https://jira.springsource.org/browse/spr-7632 在我的应用程序中,r

  • 这是/可能重复: WebSocket-InvalidStateError:连接尚未建立。 我正在实行通知制度。并希望在用户登录时初始化套接字连接,并向他显示他的通知,以及如果发生了一些事件。 我的代码片段如下所示。 websocket.js: 网络选项卡

  • 我正在使用Jpa和Hibernate。 我的项目中发生了一件非常奇怪的事情。 我有两个实体:学生和课程,多对多的关系。 很长一段时间内,一切都运行得很好,但突然我遇到了这个问题: 当我找到一个特定的学生(em.find)并使用getter(student.getcourses)返回其课程列表时,我只收到列表的一部分!如果我使用一个查询(“Select s.cources from Students

  • 我正在尝试使用@ResponseBody实现SpringWebMVC@ExceptionHandler,以返回包含验证错误的对象。(此处记录了策略E)。 在Spring3.0。x、 自解决以来,有一个已确认的错误,它阻止了此功能正常工作。我使用的是Spring 3.1.2,不应该碰到它。 然而,我遇到了一个例外“找不到可接受的代表”。 例外情况如下: 代码如下: 有什么想法吗?